﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mobile;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Web.UI.MobileControls;
using DECOR.BL.BE;
using DECOR.BL.BC;
using System.Collections.Generic;
using System.Drawing;
namespace MobileWebApp
{
    public partial class docVenta : MobilePage
    {
        private PedidoBE objpedido = new PedidoBE();
        private List<MaterialBE> dt = new List<MaterialBE>();

        protected void Page_PreRender(object sender, EventArgs e)
        {
            Response.Write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Mobile 1.0//EN\" \"http://www.wapforum.org/DTD/xhtml-mobile10.dtd\">\n");
            //<html xmlns="http://www.w3.org/1999/xhtml" >
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["UsuarioWeb"] == null)
            {
                Response.Redirect(ParametroBC.Instance.getParamValue("LogPage"));
            }
            if (!Page.IsPostBack)
            {
                List<GenericBE> lstCondicionesPago = CondicionPagoBC.Instance.listar();
                cmbCondicionesPago.DataValueField = "Codigo";
                cmbCondicionesPago.DataTextField = "Descripcion";
                cmbCondicionesPago.DataSource = lstCondicionesPago;
                cmbCondicionesPago.DataBind();

                List<GenericBE> lvLstPrioridadEnt = PedidoBC.Instance.listaCondicionesExp();
                cmbCondExp.DataSource = lvLstPrioridadEnt;
                cmbCondExp.DataValueField = "Codigo";
                cmbCondExp.DataTextField = "Descripcion";
                cmbCondExp.DataBind();
                cmbCondExp.SelectedIndex = 0;
                DesactivarControles();

                List<TipoDocumentoBE> listTipoDoc = TipoDocumentoBC.Instance.listar();
                cmbTipoDoc.DataSource = listTipoDoc;
                cmbTipoDoc.DataValueField = "Codigo";
                cmbTipoDoc.DataTextField = "Descripcion";
                cmbTipoDoc.DataBind();

                calculaFechaEntregaItem();
                CargaValoresDef();
            }
        }
        private void CargaValoresDef()
        {
            int i = 0;
            for (i = 0; i < cmbCondicionesPago.Items.Count; i++)
            {
                if (cmbCondicionesPago.Items[i].Value == ParametroBC.Instance.getParamValue("CondPago"))
                {
                    cmbCondicionesPago.SelectedIndex = i;
                }
            }
            for (i = 0; i < cmbTipoDoc.Items.Count; i++)
            {
                if (cmbTipoDoc.Items[i].Value == ParametroBC.Instance.getParamValue("TipoDoc"))
                {
                    cmbTipoDoc.SelectedIndex = i;
                }
            }

            UsuarioWebBE usuario = (UsuarioWebBE)Session["UsuarioWeb"];
            txtCodCli.Text = usuario.ClienteEvent == "" ? ParametroBC.Instance.getParamValue("NumCliente") : usuario.ClienteEvent;
        }
 
        protected void btnIngresarMat_Click(object sender, EventArgs e)
        {
            try
            {
                lblResultado.Text = "";
                string resultado = addItem(txtCodMaterial.Text, Convert.ToDecimal(txtCantidad.Text));
                if (resultado.Equals(""))
                {
                    this.objpedido = (PedidoBE)Session["Pedido"];
                    DetalleBE objDetalle = this.objpedido.Detalle[this.objpedido.Detalle.Count - 1];
                    List<GenericBE> listacentro = CentroBC.Instance.listar(objDetalle.Material, objpedido.OrgVentas);
                    if (listacentro.Count > 0)
                    {
                        ////-- corregir problema con los índices.
                        //if (objpedido.OrgVentas == "1000") { objpedido.Detalle[Convert.ToInt32(objDetalle.Posicion) / 10 - 1].CodCentro = "9110"; }
                        //else if (objpedido.OrgVentas == "2000") { objpedido.Detalle[Convert.ToInt32(objDetalle.Posicion) / 10 - 1].CodCentro = "2010"; }
                        if (objpedido.OrgVentas == "1000") { objpedido.Detalle[this.objpedido.Detalle.Count - 1].CodCentro = "9110"; }
                        else if (objpedido.OrgVentas == "2000") { objpedido.Detalle[this.objpedido.Detalle.Count - 1].CodCentro = "2010"; }
                    }
                    //List<GenericBE> listalmacenes = AlmacenBC.Instance.listar(objpedido.Detalle[Convert.ToInt32(objDetalle.Posicion) / 10 - 1].CodCentro);
                    List<GenericBE> listalmacenes = AlmacenBC.Instance.listar(objpedido.Detalle[this.objpedido.Detalle.Count - 1].CodCentro);
                    //objpedido.Detalle[Convert.ToInt32(objDetalle.Posicion) / 10 - 1].CodAlmacen = listalmacenes[0].Codigo.ToString();
                    objpedido.Detalle[this.objpedido.Detalle.Count - 1].CodAlmacen = listalmacenes[0].Codigo.ToString();
                    List<GenericBE> listalotes = new List<GenericBE>();
                    string loteoptimo = "";
                    if (!ParametroBC.Instance.esTipoSinLote(objpedido.CodTipoDoc))
                    {
                        //listalotes = StockBC.Instance.listarLotes(objpedido.Detalle[Convert.ToInt32(objDetalle.Posicion) / 10 - 1].CodMaterial, objpedido.Detalle[Convert.ToInt32(objDetalle.Posicion) / 10 - 1].CodCentro, listalmacenes[0].Codigo.ToString(), Convert.ToDecimal(txtCantidad.Text), "", out loteoptimo);
                        listalotes = StockBC.Instance.listarLotes(objpedido.Detalle[this.objpedido.Detalle.Count - 1].CodMaterial, objpedido.Detalle[this.objpedido.Detalle.Count - 1].CodCentro, listalmacenes[0].Codigo.ToString(), Convert.ToDecimal(txtCantidad.Text), "", out loteoptimo);
                    }
                    if (ParametroBC.Instance.esTipoOferta(objpedido.CodTipoDoc))
                    {
                        loteoptimo = "";

                    }

                    //objpedido.Detalle[Convert.ToInt32(objDetalle.Posicion) / 10 - 1].CodLote = loteoptimo;
                    objpedido.Detalle[this.objpedido.Detalle.Count - 1].CodLote = loteoptimo;
                    objpedido.TipoCambio = ParametroBC.Instance.getTipoCambio();
                    objpedido.CodOficina = Session["UsuarioWeb"] != null ? ((UsuarioWebBE)Session["UsuarioWeb"]).OfVentas : "";
                    //objpedido.CanalDist = Session["UsuarioWeb"] != null ? ((UsuarioWebBE)Session["UsuarioWeb"]).CanalDist : "";
                    //------------
                    string retmesg = PedidoBC.Instance.cargarCondiciones(ref this.objpedido);
                    //--------------

                    //rgutierrez 15.11.2011
                    CargarMateriales(objpedido.Detalle);
                    ////cambiarPos();
                    //listMateriales.DataSource = objpedido.Detalle;
                    //listMateriales.DataBind();

                    ActivarControles();
                    CargarTotales(objpedido);
                    Session["Pedido"] = objpedido;
                }
                else
                {
                    lblMensaje.Text = resultado;
                    lblResultado.Text = resultado;
                }
            }
            catch(Exception ex)
            {
                //lblResultado.Text = "Debe Ingresar el Codigo de Material y la Cantidad Correctamente";
                lblResultado.Text = ex.Message;
            }
        }
        protected void btnMateriales_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtCodCli.Text.Equals("")) { throw new Exception("Debe Ingresar el Código de Cliente"); }
                InsertarInfo();
                ActiveForm = frmMateriales;
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
            }
        }
        private void calculaFechaEntregaItem(DetalleBE objDetalle)
        {
            DateTime fechaCalculada, fechaActual = DateTime.Today;
            double factor = 0;
            //----
            if (objDetalle.PrioridadEntrega == "01" || objDetalle.PrioridadEntrega == "04")//normal +2
            {
                factor = 2;
            }
            else if (objDetalle.PrioridadEntrega == "02")//express +1
            {
                factor = 1;
            }
            else
            {
                factor = 0;
            }
            //-----
            int count = Convert.ToInt32(factor);
            //Si es domingo pasa como si fuera lunes
            if (fechaActual.DayOfWeek == DayOfWeek.Sunday)
            {
                count += 1;
            }
            fechaCalculada = fechaActual;
            for (int i = 1; i <= count; i++)
            {
                fechaCalculada = fechaCalculada.AddDays(1);
                if (fechaCalculada.DayOfWeek == DayOfWeek.Sunday)
                {
                    fechaCalculada = fechaCalculada.AddDays(1);
                }
            }

            //--- con una sola fecha de reparto:
            //if (fechaCalculada > objDetalle.FechaEntrega)
            //{
            //    objDetalle.FechaEntrega = fechaCalculada;
            //}
            //else if (objDetalle.FechaEntrega.DayOfWeek == DayOfWeek.Sunday)
            //{
            //    objDetalle.FechaEntrega = objDetalle.FechaEntrega.AddDays(1);
            //}

            //--- múltiples fechas de reparto:
            if (objDetalle.Repartos.Count == 0) { objDetalle.Repartos.Add(new RepartoBE()); }
            foreach (RepartoBE itmRep in objDetalle.Repartos)
            {
                if (fechaCalculada > itmRep.FechaEntrega)
                {
                    itmRep.FechaEntrega = fechaCalculada;
                }
                else if (itmRep.FechaEntrega.DayOfWeek == DayOfWeek.Sunday)
                {
                    itmRep.FechaEntrega = itmRep.FechaEntrega.AddDays(1);
                }
            }
        }

        //rgutierrez 15.11.2011
        //protected void listMateriales_Command(object sender, ObjectListCommandEventArgs e)
        //{
        //    try
        //    {
        //        if (e.CommandName == "Borrar")
        //        {
        //            objpedido = (PedidoBE)Session["Pedido"];
        //            List<DetalleBE> lstMateriales;
        //            lstMateriales = (objpedido.Detalle == null) ? new List<DetalleBE>() : (List<DetalleBE>)objpedido.Detalle;

        //            string posicion = lstMateriales[e.ListItem.Index].Posicion;
        //            if (!ParametroBC.Instance.esTipoPosCombo(posicion))
        //            {
        //                lstMateriales.RemoveAll(X => X.PosSup == lstMateriales[e.ListItem.Index].Posicion);
        //                lstMateriales.RemoveAt(e.ListItem.Index);
        //            }

        //            objpedido.Detalle = lstMateriales;
        //            if (objpedido.Detalle.Count == 0)
        //            {
        //                DesactivarControles();
        //            }
        //            //cambiarPos();
        //            Session["Pedido"] = objpedido;
        //            listMateriales.DataSource = objpedido.Detalle;
        //            listMateriales.DataBind();
        //            CargarTotales(objpedido);


        //        }
        //        if (e.CommandName == "CambiarAlm")
        //        {

        //            objpedido = (PedidoBE)Session["Pedido"];

        //            List<GenericBE> listacentros = CentroBC.Instance.listar(objpedido.Detalle[e.ListItem.Index].Material, objpedido.OrgVentas);
        //            cmbCentro.DataSource = listacentros;
        //            cmbCentro.DataTextField = "Descripcion";
        //            cmbCentro.DataValueField = "Codigo";
        //            cmbCentro.DataBind();

        //            string x = objpedido.Detalle[e.ListItem.Index].CodCentro;
        //            int i = 0;
        //            for (i = 0; i < cmbCentro.Items.Count; i++)
        //            {
        //                if (cmbCentro.Items[i].Value == x)
        //                {
        //                    cmbCentro.SelectedIndex = i;

        //                }
        //            }

        //            txtcantidadmat.Text = objpedido.Detalle[e.ListItem.Index].Cantidad.ToString();
        //            Session["indice"] = e.ListItem.Index;
        //            ActiveForm = frmEdicionMat;
        //        }
        //    }
        //    catch (Exception ex) { lblMensaje.Text = ex.Message; }
        //}

        protected void btnAceptar_Command(object sender, EventArgs e)
        {

            DetalleBE objtempde = (DetalleBE)Session["objTemp"];
            int indice = (int)Session["indice"];

            objpedido = (PedidoBE)Session["Pedido"];
            if (cmbCentro.Selection != null)
            {
                objpedido.Detalle[indice].CodCentro = objtempde.CodCentro;
            }
            if (objtempde.CodAlmacen != null)
            {
                objpedido.Detalle[indice].CodAlmacen = objtempde.CodAlmacen;
            }
            else if (cmbAlmacenes.Selection != null)
            {
                objpedido.Detalle[indice].CodAlmacen = cmbAlmacenes.Selection.Value;
            }
            if (cmbLotes.Selection != null)
            {

                objpedido.Detalle[indice].CodLote = cmbLotes.Selection.Value;
            }
            else
            {

                objpedido.Detalle[indice].CodLote = "";

            }
            objpedido.Detalle[indice].Cantidad = objtempde.Cantidad;
            objpedido.Detalle[indice].DctoDecorPorc.Importe = objtempde.DctoDecorPorc.Importe; //rgutierrez 18.11.2011

            //rgutierrez 15.12.2011
            objpedido.Detalle[indice].DctoGenerico.Importe = objtempde.DctoGenerico.Importe; //ZD09
            objpedido.Detalle[indice].DctoZD11.Importe = objtempde.DctoZD11.Importe;

            if (!ParametroBC.Instance.esTipoX(objpedido.Detalle[indice].Material.Tipo, "TipoMatServicio") &&
                                       ParametroBC.Instance.esTipoX(objpedido.Detalle[indice].Material.UMedidaRendimiendo, "UMRendimiento"))
            {
                decimal nuevaCant = this.calculaRendimiento(objpedido.Detalle[indice].Cantidad, objpedido.Detalle[indice].ValorRendimiento);
                objpedido.Detalle[indice].Cantidad = nuevaCant;
            }

            PedidoBC.Instance.ActualizarPosiciones(objpedido); //rgutierrez 15.11.2011
            string retmesg = PedidoBC.Instance.cargarCondiciones(ref this.objpedido);

            Session["Pedido"] = objpedido;
            Session["indice"] = null;

            Session["obtTemp"] = null;

            //rgutierrez 15.11.2011
            CargarMateriales(objpedido.Detalle);
            //listMateriales.DataSource = objpedido.Detalle;
            //listMateriales.DataBind();

            CargarTotales(objpedido);

            ActiveForm = frmMateriales;

        }
        protected void btnCancelar_Command(object sender, EventArgs e)
        {
            Session["indice"] = null;
            Session["obtTemp"] = null;
            ActiveForm = frmMateriales;
        }

        protected void btnatras_click(object sender, EventArgs e)
        {
            ActiveForm = frmMain;
        }
        protected void btnContinuar_Command(object sender, EventArgs e)
        {
            try
            {
                //rgutierrez 15.11.2011
                if (cmbCentro.Selection == null)
                {
                    lblMsjEdicionMat.Text = "Debe seleccionar un centro.";
                    return;
                }

                //rgutierrez 17.01.2012
                if (txtDctoDecorPorc.Text.Trim() == "")
                {
                    txtDctoDecorPorc.Text = "0";
                }
                if (txtDctoGenerico.Text.Trim() == "")
                {
                    txtDctoGenerico.Text = "0";
                }
                if (txtDctoZD11.Text.Trim() == "")
                {
                    txtDctoZD11.Text = "0";
                }
                if (Convert.ToDecimal(txtDctoDecorPorc.Title) != 0 && Math.Abs(Convert.ToDecimal(txtDctoDecorPorc.Text)) > Math.Abs(Convert.ToDecimal(txtDctoDecorPorc.Title)))
                {
                    lblMsjEdicionMat.Text = "El descuento ZD00 ingresado no debe superar el máximo.";
                    return;
                }
                if (Convert.ToDecimal(txtDctoGenerico.Title) != 0 && Math.Abs(Convert.ToDecimal(txtDctoGenerico.Text)) > Math.Abs(Convert.ToDecimal(txtDctoGenerico.Title)))
                {
                    lblMsjEdicionMat.Text = "El descuento ZD09 ingresado no debe superar el máximo.";
                    return;
                }
                if (Convert.ToDecimal(txtDctoZD11.Title) != 0 && Math.Abs(Convert.ToDecimal(txtDctoZD11.Text)) > Math.Abs(Convert.ToDecimal(txtDctoZD11.Title)))
                {
                    lblMsjEdicionMat.Text = "El descuento ZD11 ingresado no debe superar el máximo.";
                    return;
                }

                objpedido = (PedidoBE)Session["Pedido"];
                int indicecentro = (int)Session["indice"];
                List<GenericBE> listalmacen = AlmacenBC.Instance.listar(objpedido.Detalle[indicecentro].Material, cmbCentro.Selection.Value);
                cmbAlmacenes.DataSource = listalmacen;
                cmbAlmacenes.DataTextField = "Descripcion";
                cmbAlmacenes.DataValueField = "Codigo";
                cmbAlmacenes.DataBind();

                //rgutierrez 30.11.2011
                string x = objpedido.Detalle[sListMateriales.Selection.Index].CodAlmacen;
                for (int i = 0; i < cmbAlmacenes.Items.Count; i++)
                {
                    if (cmbAlmacenes.Items[i].Value == x)
                    {
                        cmbAlmacenes.SelectedIndex = i;
                    }
                }

                if (!ParametroBC.Instance.esTipoOferta(objpedido.CodTipoDoc))
                {
                    btnAceptar.Visible = false;
                    btnContinuar2.Visible = true;
                }
                else
                {
                    btnAceptar.Visible = true;
                    btnContinuar2.Visible = false;
                }
                DetalleBE objTemp = new DetalleBE();
                objTemp.CodCentro = cmbCentro.Selection.Value;
                objTemp.Cantidad = Convert.ToDecimal(txtcantidadmat.Text);

                //rgutierrez 17.11.2011
                objTemp.DctoDecorPorc.Condicion = ParametroBC.Instance.getParamValue("CondDctoDecorPorc");
                objTemp.DctoDecorPorc.Importe = Convert.ToDecimal(txtDctoDecorPorc.Text);

                //rgutierrez 15.12.2011
                objTemp.DctoGenerico.Condicion = ParametroBC.Instance.getParamValue("CondDctos"); //ZD09
                objTemp.DctoGenerico.Importe = Convert.ToDecimal(txtDctoGenerico.Text);
                objTemp.DctoZD11.Condicion = ParametroBC.Instance.getParamValue("CondZD11");
                objTemp.DctoZD11.Importe = Convert.ToDecimal(txtDctoZD11.Text);

                Session["objTemp"] = objTemp;
                Session["Pedido"] = objpedido;
                ActiveForm = frmCamAlm;
            }
            catch (Exception ex) 
            {
                lblMsjEdicionMat.Text = ex.Message; //rgutierrez 15.11.2011
                //lblMensaje.Text = ex.Message; 
            }
        }
        protected void btnAtras2_Command(object sender, EventArgs e)
        {
            ActiveForm = frmEdicionMat;
        }
        protected void btnContinuar2_Command(object sender, EventArgs e)
        {
            try
            {
                objpedido = (PedidoBE)Session["Pedido"];
                int indicelote = (int)Session["indice"];
                DetalleBE objtemp = (DetalleBE)Session["objTemp"];
                objtemp.CodAlmacen = cmbAlmacenes.Selection.Value;

                List<GenericBE> listalotes = new List<GenericBE>();
                string loteoptimo = "";
                if (!ParametroBC.Instance.esTipoSinLote(objpedido.CodTipoDoc))
                {
                    listalotes = StockBC.Instance.listarLotes(objpedido.Detalle[indicelote].CodMaterial, objtemp.CodCentro, cmbAlmacenes.Selection.Value, objtemp.Cantidad, "", out loteoptimo);
                }
                if (listalotes.Count != 0)
                {
                    cmbLotes.DataSource = listalotes;
                    cmbLotes.DataValueField = "Codigo";
                    cmbLotes.DataTextField = "Descripcion";
                    cmbLotes.DataBind();
                    int i = 0;
                    for (i = 0; i < cmbLotes.Items.Count; i++)
                    {
                        if (cmbLotes.Items[i].Value == loteoptimo)
                        {
                            cmbLotes.SelectedIndex = i;
                        }
                    }
                }
                else
                {
                    GenericBE objVacio = new GenericBE(); objVacio.Codigo = ""; objVacio.Descripcion = "- ninguno -";
                    listalotes.Add(objVacio);
                    cmbLotes.DataSource = listalotes;
                    cmbLotes.DataValueField = "Codigo";
                    cmbLotes.DataTextField = "Descripcion";

                    cmbLotes.DataBind();
                }
                ActiveForm = frmLotes;
            }
            catch (Exception ex) { lblMensaje.Text = ex.Message; }
        }
        protected void btnAtras3_Command(object sender, EventArgs e)
        {
            ActiveForm = frmCamAlm;
        }

        protected void btnFecha_Click(object sender, EventArgs e)
        {
            calFecha.Visible = true;
            calFecha.SelectedDate = DateTime.Now;
            btnFecha.Visible = false;
            calFecha.VisibleDate = DateTime.Now;
        }
        protected void calFecha_Selection(object sender, EventArgs e)
        {
            DateTime fecha = new DateTime();
            fecha = calFecha.SelectedDate;

            txtFecha.Text = fecha.ToShortDateString();
            calFecha.Visible = false;
            btnFecha.Visible = true;
        }

        //rgutierrez 29.11.2011
        private bool documentoValido()
        {
            objpedido = (PedidoBE)Session["Pedido"];
            if (objpedido.Total <= 0m && cmbTipoDoc.Selection.Value != ParametroBC.Instance.getParamValue("CodReserva"))
            {
                lblResultado.Text = "Documento inválido, total del documento no puede ser menor o igual a cero";
                return false;
            }

            foreach (DetalleBE objItem in objpedido.Detalle)
            {
                if (!ParametroBC.Instance.esTipoPosCombo(objItem.TipoPosicion))
                {
                    if (objItem.SubTotal <= 0m && !ParametroBC.Instance.esTipoX(cmbTipoDoc.Selection.Value, "CodReserva"))
                    {
                        lblResultado.Text = string.Format("- Subtotal en posición {0} no puede ser menor o igual a cero.\n", objItem.Posicion);
                        return false;
                    }
                }
            }
            return true;
        }

        protected void btnGrabar_Command(object sender, EventArgs e)
        {
            try
            {
                InsertarInfo();
                string valret = "", numPedido = "", emp = "";
                objpedido = (PedidoBE)Session["Pedido"];

                //rgutierrez 29.11.2011
                if (!documentoValido())
                {
                    return;
                }

                //-- si no hay número de pedido, se crea uno nuevo, sino, se modifica
                if (objpedido.NumPedido.Equals(string.Empty) || objpedido.NumPedido.Equals("0000000000"))
                {
                    if (ParametroBC.Instance.esTipoOferta(objpedido.CodTipoDoc))
                    {
                        //-- calcular fecha de validez:
                        Double validez = Convert.ToDouble(ParametroBC.Instance.getParamValue("ValidezOferta"));
                        objpedido.FechaValidez = objpedido.Fecha.AddDays(validez);

                        foreach (DetalleBE detItem in objpedido.Detalle)
                        {
                            detItem.CodLote = "";
                            if (detItem.Repartos.Count == 0) { detItem.Repartos.Add(new RepartoBE()); }
                            detItem.Repartos[0].CantPed = detItem.Cantidad;
                            detItem.Repartos[0].FechaEntrega = objpedido.FechaEntrega;
                            detItem.Repartos[0].Pos = "0001";
                            detItem.PrioridadEntrega = objpedido.CondExp;
                        }
                    }
                    else
                    {
                        foreach (DetalleBE detItem in objpedido.Detalle)
                        {
                            if (detItem.Repartos.Count == 0) { detItem.Repartos.Add(new RepartoBE()); }
                            detItem.Repartos[0].CantPed = detItem.Cantidad;
                            detItem.Repartos[0].FechaEntrega = objpedido.FechaEntrega;
                            detItem.Repartos[0].Pos = "0001";
                            detItem.PrioridadEntrega = objpedido.CondExp;
                        }
                    }

                    //List<InterlocutorBE> listainter = this.CargarInterlocutores();
                    objpedido.Interlocutores = this.CargarInterlocutores(); //listainter;
                    //List<TextoBE> listartexto = this.listaTex();
                    objpedido.Textos = this.listaTex();// listartexto;

                    valret = PedidoBC.Instance.procesarPedido(out numPedido, objpedido);
                    if (numPedido.Equals(""))
                    {
                        emp = valret.Replace(Environment.NewLine, " ");
                        lblResultado.Text = emp;
                        lblMensaje.Text = emp;
                    }
                    else
                    {
                        emp = valret.Replace(Environment.NewLine, " ");
                        lblResult.Text = emp;
                        //-- se graba el pedido y se limpia la sesión.
                        btnGrabar.Visible = false;

                        //limpiarSesiones();

                        btnNuevo.Visible = true;
                        btnModificar.Visible = true;
                        ActiveForm = frmResultado;
                    }
                }
                else
                {
                    bool pOk = false;
                    valret = PedidoBC.Instance.modificar(out pOk, objpedido);
                    if (!pOk)
                    {
                        emp = valret.Replace(Environment.NewLine, " ");
                        lblResultado.Text = emp;
                        lblMensaje.Text = emp;
                    }
                    else
                    {
                        emp = valret.Replace(Environment.NewLine, " ");
                        lblResult.Text = emp;
                        //-- se graba el pedido y se limpia la sesión.
                        btnGrabar.Visible = false;

                        //limpiarSesiones();

                        btnNuevo.Visible = true;
                        btnModificar.Visible = true;
                        ActiveForm = frmResultado;
                    }
                }
            }
            catch (Exception ex) { lblMensaje.Text = ex.Message; }
        }
        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            limpiarSesiones();
            Session["indice"] = null;
            Session["obtTemp"] = null;
            ActiveForm = frmMateriales;
            Response.Redirect(ParametroBC.Instance.getParamValue("MainPage"));
        }
        protected void btnModificar_Click(object sender, EventArgs e)
        {
            //Session["indice"] = null;
            //Session["obtTemp"] = null;
            ActiveForm = frmMateriales;
        }

        private void cargarInfoCliente()
        {
            if (Session["Cliente"] != null)
            {
                ClienteBE objCliente = (ClienteBE)Session["Cliente"];
                txtNomCli.Text = objCliente.Descripcion;
                txtPobCli.Text = objCliente.Ciudad == "" ? ParametroBC.Instance.getParamValue("CiudadSol") : objCliente.Ciudad;
                txtCodpCli.Text = objCliente.CodigoPostal == "" ? ParametroBC.Instance.getParamValue("CodPosSol") : objCliente.CodigoPostal;
                txtDirCli.Text = objCliente.Direccion == "" ? ParametroBC.Instance.getParamValue("DirSol") : objCliente.Direccion;
                txtMailCli.Text = objCliente.Mail == "" ? ParametroBC.Instance.getParamValue("MailSol") : objCliente.Mail; //@rgutierrez 15.11.2011
            }
        }
        protected void btnGrabarInfoCliente_Click(object sender, EventArgs e)
        {
            try
            {
                if (Session["Pedido"] != null)
                {
                    objpedido = (PedidoBE)Session["Pedido"];
                }
                ClienteBE objCliente = (ClienteBE)Session["Cliente"];
                if (objCliente != null)
                {
                    objCliente.Descripcion = txtNomCli.Text.Trim();// != "" ? txtNomCli.Text.Trim() : objCliente.Descripcion;
                    objCliente.Ciudad = txtPobCli.Text.Trim();// != "" ? txtPobCli.Text.Trim() : objCliente.Ciudad;
                    objCliente.CodigoPostal = txtCodpCli.Text.Trim();// != "" ? txtCodpCli.Text.Trim() : objCliente.CodigoPostal;
                    objCliente.Direccion = txtDirCli.Text.Trim();// != "" ? txtDirCli.Text.Trim() : objCliente.Direccion;
                    objCliente.Mail = txtMailCli.Text.Trim(); //@rgutierrez 15.11.2011
                    Session["Cliente"] = objCliente;
                }
                ActiveForm = frmMain;
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
            }
        }
        protected void btnDatosCli_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtCodCli.Text.Equals("")) { throw new Exception("Debe Ingresar el Código de Cliente"); }
                InsertarInfo();
                cargarInfoCliente();
                ActiveForm = frmDatosCliente;
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
            }
        }
        protected void cmbCondexp_Changed(object sender, EventArgs e)
        {
            calculaFechaEntregaItem();
        }
        private void limpiarSesiones()
        {
            if (Session["Pedido"] != null)
            {
                Session.Remove("Pedido");
                Session.Remove("Cliente");

                limpiarControles();
                DesactivarControles();
            }
        }
        protected void btnCancel_Click(object sender, EventArgs e)
        {
            limpiarSesiones();
            ActiveForm = frmMateriales;
            ActiveForm = frmMain;
        }
        protected void btnAtras4_Click(object sender, EventArgs e)
        {
            ActiveForm = frmMateriales;
        }
        protected void btnStock_Click(object sender, EventArgs e)
        {
            try
            {
                lblMensaje.Text = lblResultado.Text = "";
                if (txtCodMaterial.Text.Trim().Equals("")) { throw new Exception("Debe ingresar un código de material."); }
                StockBE pObjStock = new StockBE();
                UsuarioWebBE objUsuario = (UsuarioWebBE) Session["UsuarioWeb"];
                pObjStock.CodMaterial = txtCodMaterial.Text.Trim().PadLeft(18, '0');

                //List<StockBE> lstStock = StockBC.Instance.buscarStock(pObjStock);
                //List<StockBE> lstStock = ParametroBC.Instance.getDataLotes(pObjStock.CodMaterial, decimal.Parse(txtCantidad.Text),
                //                                            pObjStock.CodCentro, pObjStock.CodAlmacen, pObjStock.CodLote,
                //                                            string.Empty, string.Empty, objUsuario.OrgVentas, objUsuario.CanalDist);

                List<StockBE> lstStock = ParametroBC.Instance.getDataLotes(pObjStock.CodMaterial, 0m,
                                                            pObjStock.CodCentro, pObjStock.CodAlmacen, "", "", "",
                                                            objUsuario.OrgVentas,"");
              //  List<StockBE> lstStockEC = StockBC.Instance.buscarStockEC(pObjStock);

                //rgutierrez 30.01.2012
                if (objUsuario.OrgVentas == "2000") //Decor Sur
                {
                    List<StockBE> lstStock2 = ParametroBC.Instance.getDataLotes(pObjStock.CodMaterial, 0m,
                                                                pObjStock.CodCentro, pObjStock.CodAlmacen, "", "", "",
                                                                "1000", "");

                    StockBE objStock;
                    foreach (StockBE item in lstStock2)
                    {
                        objStock = lstStock.Find(X => X.CodCentro == item.CodCentro);
                        if (objStock == null)
                        {
                            lstStock.Add(item);
                        }
                    }
                }

                if (lstStock.Count > 0)
                {
                    lstStock.RemoveAll(X => (X.CodLote.Equals("") || X.StockDisponible <= 0m));
                    olstStock.DataSource = lstStock;
                    olstStock.DataBind();
                    ActiveForm = frmStock;
                }
                else
                {
                    lblMensaje.Text = lblResultado.Text = "No se encontraron lotes disponibles.";
                }
            }
            catch (Exception ex)
            {
                lblMensaje.Text = lblResultado.Text = ex.Message;
            }
        }
        protected void btnSalir_Click(object sender, EventArgs e)
        {
            limpiarSesiones();
            ActiveForm = frmMateriales;
            ActiveForm = frmMain;
            Session.Remove("UsuarioWeb");
            Response.Redirect(ParametroBC.Instance.getParamValue("LogPage"));
        }
        private void ActivarControles()
        {
            lbltexTotal.Visible = true;
            lbltexSubTotal.Visible = true;
            lbltexIGV.Visible = true;
            lblTotal.Visible = true;
            lblSubTotal.Visible = true;
            lblIGV.Visible = true;
            btnGrabar.Visible = true;
            btnGrabar2.Visible = true;
            lbltexTotal2.Visible = true;
            lbltexSubTotal2.Visible = true;
            lbltexIGV2.Visible = true;
            lblSubTotal2.Visible = true;
            lblTotal2.Visible = true;
            lblIGV2.Visible = true;
        }
        private void DesactivarControles()
        {
            lbltexTotal.Visible = false;
            lbltexSubTotal.Visible = false;
            lbltexIGV.Visible = false;
            lblTotal.Visible = false;
            lblSubTotal.Visible = false;
            lblIGV.Visible = false;
            btnGrabar.Visible = false;

            btnNuevo.Visible = false;
            lbltexTotal2.Visible = false;
            lbltexSubTotal2.Visible = false;
            lbltexIGV2.Visible = false;
            lblSubTotal2.Visible = false;
            lblTotal2.Visible = false;
            lblIGV2.Visible = false;
            btnGrabar2.Visible = false;

        }
        
        private void limpiarControles()
        {
            //rgutierrez 15.11.2011
            sListMateriales.Items.Clear();
            //listMateriales.DataSource = new DataTable();
            //listMateriales.DataBind();

            cmbCondExp.SelectedIndex = 0;
            txtCodMaterial.Text = "1100";// string.Empty;
            txtCantidad.Text = "1";// string.Empty;
            lblResultado.Text = string.Empty;
            txtPedCli.Text = string.Empty;
            calculaFechaEntregaItem();
            CargaValoresDef();

            txtNomCli.Text = string.Empty;
            txtDirCli.Text = string.Empty;
            txtCodpCli.Text = string.Empty;
            txtPobCli.Text = string.Empty;
            txtMailCli.Text = string.Empty; //rgutierrez 15.11.2011
        }
        private void CargarTotales(PedidoBE objeto)
        {
            lblTotal.Text = string.Format("{0:n2}", objeto.Total);
            lblSubTotal.Text = string.Format("{0:n2}", objeto.SubTotal);
            lblIGV.Text = string.Format("{0:n2}", objeto.Igv);

            lblTotal2.Text = string.Format("{0:n2}", objeto.Total);
            lblSubTotal2.Text = string.Format("{0:n2}", objeto.SubTotal);
            lblIGV2.Text = string.Format("{0:n2}", objeto.Igv);
        }
        private void InsertarInfo()
        {
            UsuarioWebBE usuario = (UsuarioWebBE)Session["UsuarioWeb"];
            objpedido.CodOficina = usuario.OfVentas;
            objpedido.CodGrupoVend = usuario.GrpVend;
            objpedido.CanalDist = usuario.CanalDist;
            objpedido.OrgVentas = usuario.OrgVentas;
            objpedido.ClasePedidoCliente = ParametroBC.Instance.getParamValue("ClasePedidoIPOD"); //rgutierrez 24.01.2012

            lblMensaje.Text = "";
            if (Session["Pedido"] != null)
            {
                objpedido = (PedidoBE)Session["Pedido"];
            }

            ClienteBE cliente = (ClienteBE)Session["Cliente"];
            if (cliente == null || txtCodCli.Text.Trim().PadLeft(10, '0') != cliente.Codigo)
            {
                cliente = ClienteBC.Instance.leer(txtCodCli.Text.Trim());
                if (cliente == null)
                {
                    throw new Exception("Cliente ingresado no existe.");
                }
                else
                {
                    Session["Cliente"] = cliente;
                }
            }
            objpedido.CodTipoDoc = cmbTipoDoc.Selection.Value;
            txtCodCli.Text = cliente.Codigo;
            objpedido.CodCliente = cliente.Codigo;  //txtCodCli.Text;

            objpedido.CondPago = cmbCondicionesPago.Selection.Value;
            objpedido.CondExp = cmbCondExp.Selection.Value;
            objpedido.TipoCambio = ParametroBC.Instance.getTipoCambio();
            objpedido.Sector = "00";
            objpedido.Moneda = "PEN";
            objpedido.GrupoCond = "";
            objpedido.Motivo = "";
            //objpedido.NumPedido = "0000000000";
            objpedido.OrdenCompra = txtPedCli.Text;
            objpedido.FechaEntrega = Convert.ToDateTime(txtFecha.Text);
            objpedido.Fecha = DateTime.Today;

            Session["Pedido"] = objpedido;
        }
        //----------------------------------------------
        private List<TextoBE> listaTex()
        {
            List<TextoBE> lstTextos = new List<TextoBE>();

            TextoBE objTextoAtencion = new TextoBE();
            objTextoAtencion.CodTexto = ParametroBC.Instance.getParamValue("TextoAtencion");
            objTextoAtencion.Descripcion = "";

            lstTextos.Add(objTextoAtencion);

            TextoBE objTextoTransporte = new TextoBE();
            objTextoTransporte.CodTexto = ParametroBC.Instance.getParamValue("TextoTransporte");
            objTextoTransporte.Descripcion = "";

            lstTextos.Add(objTextoTransporte);

            TextoBE objTextoTiempoEntrega = new TextoBE();
            objTextoTiempoEntrega.CodTexto = ParametroBC.Instance.getParamValue("TextoTiempoEntrega");
            objTextoTiempoEntrega.Descripcion = "";

            lstTextos.Add(objTextoTiempoEntrega);

            TextoBE objTextoJefeTienda = new TextoBE();
            objTextoJefeTienda.CodTexto = ParametroBC.Instance.getParamValue("TextoJefeTienda");
            objTextoJefeTienda.Descripcion = "";

            lstTextos.Add(objTextoJefeTienda);

            TextoBE objTextoObsAdministrativas = new TextoBE();
            objTextoObsAdministrativas.CodTexto = ParametroBC.Instance.getParamValue("TextoObsAdministrativas");
            objTextoObsAdministrativas.Descripcion = "";

            lstTextos.Add(objTextoObsAdministrativas);

            TextoBE objTextoRefFactura = new TextoBE();
            objTextoRefFactura.CodTexto = ParametroBC.Instance.getParamValue("TextoRefFactura");
            objTextoRefFactura.Descripcion = "";

            lstTextos.Add(objTextoRefFactura);

            TextoBE objTextoRefDireccion = new TextoBE();
            objTextoRefDireccion.CodTexto = ParametroBC.Instance.getParamValue("TextoRefDireccion");
            objTextoRefDireccion.Descripcion = "";

            lstTextos.Add(objTextoRefDireccion);
            return lstTextos;
        }
        //---------------------------------------------
        private List<InterlocutorBE> CargarInterlocutores()
        {
            ClienteBE objCliente = (ClienteBE)Session["Cliente"];
            if (objCliente == null)
            {
                throw new Exception("Debe ingresar el código del Cliente.");
            }

            List<InterlocutorBE> lstInterlocutores = new List<InterlocutorBE>();

            InterlocutorBE objSolicitante = new InterlocutorBE();

            objSolicitante.Funcion = ParametroBC.Instance.getParamValue("IlocCliente");
            objSolicitante.Cliente.Codigo = txtCodCli.Text;
            //if (objCliente.Eventual)
            //{
            //    objSolicitante.Cliente.Descripcion = ParametroBC.Instance.getParamValue("DesSol");
            //    objSolicitante.Cliente.Direccion = ParametroBC.Instance.getParamValue("DirSol");
            //    objSolicitante.Cliente.CodigoPostal = ParametroBC.Instance.getParamValue("CodPosSol");
            //    objSolicitante.Cliente.Ciudad = ParametroBC.Instance.getParamValue("CiudadSol");
            //    objSolicitante.Cliente.Telefono = ParametroBC.Instance.getParamValue("TelfSol");
            //    objSolicitante.Cliente.Ruc = ParametroBC.Instance.getParamValue("RucSol");
            //}
            //else
            {
                objSolicitante.Cliente.Descripcion = objCliente.Descripcion;
                objSolicitante.Cliente.Direccion = objCliente.Direccion;
                objSolicitante.Cliente.CodigoPostal = objCliente.CodigoPostal;
                objSolicitante.Cliente.Ciudad = objCliente.Ciudad;
                objSolicitante.Cliente.Telefono = objCliente.Telefono;
                objSolicitante.Cliente.Ruc = objCliente.Ruc;
                objSolicitante.Cliente.Mail = objCliente.Mail; //rgutierrez 30.11.2011
            }
            lstInterlocutores.Add(objSolicitante);

            InterlocutorBE objDestMercaderia = new InterlocutorBE();
            objDestMercaderia.Funcion = ParametroBC.Instance.getParamValue("IlocDestMerc");
            objDestMercaderia.Cliente.Codigo = txtCodCli.Text;
            //if (objCliente.Eventual)
            //{

            //    objDestMercaderia.Cliente.Descripcion = ParametroBC.Instance.getParamValue("DesMer");
            //    objDestMercaderia.Cliente.Direccion = ParametroBC.Instance.getParamValue("DirMer");
            //    objDestMercaderia.Cliente.CodigoPostal = ParametroBC.Instance.getParamValue("CodPosMer");
            //    objDestMercaderia.Cliente.Ciudad = ParametroBC.Instance.getParamValue("CiudadMer");
            //    objDestMercaderia.Cliente.Telefono = ParametroBC.Instance.getParamValue("TelfMer");
            //}
            //else
            {
                //rgutierrez 10.01.2012
                objDestMercaderia.Cliente.Descripcion = objCliente.Descripcion;
                objDestMercaderia.Cliente.Direccion = objCliente.Direccion;
                objDestMercaderia.Cliente.CodigoPostal = objCliente.CodigoPostal;
                objDestMercaderia.Cliente.Ciudad = objCliente.Ciudad;
                objDestMercaderia.Cliente.Telefono = objCliente.Telefono;
                objDestMercaderia.Cliente.Ruc = objCliente.Ruc;
                //objDestMercaderia.Cliente.Descripcion = "";// objCliente.Descripcion;
                //objDestMercaderia.Cliente.Direccion = "";//objCliente.Direccion;
                //objDestMercaderia.Cliente.CodigoPostal = "";//objCliente.CodigoPostal;
                //objDestMercaderia.Cliente.Ciudad = "";//objCliente.Ciudad;
                //objDestMercaderia.Cliente.Telefono = "";//objCliente.Telefono;
                //objDestMercaderia.Cliente.Ruc = "";//objCliente.Ruc;
            }
            lstInterlocutores.Add(objDestMercaderia);

            InterlocutorBE objDestFactura = new InterlocutorBE();
            objDestFactura.Funcion = ParametroBC.Instance.getParamValue("IlocDestFact");
            objDestFactura.Cliente.Codigo = txtCodCli.Text;
            //if (objCliente.Eventual)
            //{
            //    objDestFactura.Cliente.Descripcion = ParametroBC.Instance.getParamValue("DesFac");
            //    objDestFactura.Cliente.Direccion = ParametroBC.Instance.getParamValue("DirFac");
            //    objDestFactura.Cliente.CodigoPostal = ParametroBC.Instance.getParamValue("CodPosFac");
            //    objDestFactura.Cliente.Ciudad = ParametroBC.Instance.getParamValue("CiudadFac");
            //    objDestFactura.Cliente.Telefono = ParametroBC.Instance.getParamValue("TelfFac");
            //}
            //else
            {
                //rgutierrez 10.01.2012
                objDestFactura.Cliente.Descripcion = objCliente.Descripcion;
                objDestFactura.Cliente.Direccion = objCliente.Direccion;
                objDestFactura.Cliente.CodigoPostal = objCliente.CodigoPostal;
                objDestFactura.Cliente.Ciudad = objCliente.Ciudad;
                objDestFactura.Cliente.Telefono = objCliente.Telefono;
                objDestFactura.Cliente.Ruc = objCliente.Ruc;
                //objDestFactura.Cliente.Descripcion = "";//objCliente.Descripcion;
                //objDestFactura.Cliente.Direccion = "";//objCliente.Direccion;
                //objDestFactura.Cliente.CodigoPostal = "";//objCliente.CodigoPostal;
                //objDestFactura.Cliente.Ciudad = "";//objCliente.Ciudad;
                //objDestFactura.Cliente.Telefono = "";//objCliente.Telefono;
                //objDestFactura.Cliente.Ruc = "";//objCliente.Ruc;
            }
            lstInterlocutores.Add(objDestFactura);

            InterlocutorBE objResPago = new InterlocutorBE();
            objResPago.Funcion = ParametroBC.Instance.getParamValue("IlocResPago");
            objResPago.Cliente.Codigo = txtCodCli.Text;
            //if (objCliente.Eventual)
            //{
            //    objResPago.Cliente.Descripcion = ParametroBC.Instance.getParamValue("DesRes");
            //    objResPago.Cliente.Direccion = ParametroBC.Instance.getParamValue("DirRes");
            //    objResPago.Cliente.CodigoPostal = ParametroBC.Instance.getParamValue("CodPosRes");
            //    objResPago.Cliente.Ciudad = ParametroBC.Instance.getParamValue("CiudadRes");
            //    objResPago.Cliente.Telefono = ParametroBC.Instance.getParamValue("TelfRes");
            //    objResPago.Cliente.Ruc = ParametroBC.Instance.getParamValue("RucRes");
            //}
            //else
            {
                //rgutierrez 10.01.2012
                objResPago.Cliente.Descripcion = objCliente.Descripcion;
                objResPago.Cliente.Direccion = objCliente.Direccion;
                objResPago.Cliente.CodigoPostal = objCliente.CodigoPostal;
                objResPago.Cliente.Ciudad = objCliente.Ciudad;
                objResPago.Cliente.Telefono = objCliente.Telefono;
                objResPago.Cliente.Ruc = objCliente.Ruc;
                //objResPago.Cliente.Descripcion = "";//objCliente.Descripcion;
                //objResPago.Cliente.Direccion = "";//objCliente.Direccion;
                //objResPago.Cliente.CodigoPostal = "";//objCliente.CodigoPostal;
                //objResPago.Cliente.Ciudad = "";//objCliente.Ciudad;
                //objResPago.Cliente.Telefono = "";//objCliente.Telefono;
                //objResPago.Cliente.Ruc = "";//objCliente.Ruc;
            }
            lstInterlocutores.Add(objResPago);

            string codEncComercial = "";
            UsuarioWebBE usuarioWeb = (UsuarioWebBE)Session["UsuarioWeb"];
            if (!objCliente.Eventual)
            {
                PersonaBE objVendedor = ClienteBC.Instance.buscaVendedor(objCliente.Codigo, usuarioWeb.OrgVentas, usuarioWeb.CanalDist);
                if (objVendedor != null)
                {
                    codEncComercial = objVendedor.CodPersona;
                }
            }
            codEncComercial = codEncComercial.Equals("") ? "" : codEncComercial;

            InterlocutorBE objEncargadoComercial = new InterlocutorBE();
            objEncargadoComercial.Funcion = ParametroBC.Instance.getParamValue("IlocVendedor1");
            objEncargadoComercial.Persona.CodPersona = usuarioWeb.PerNr; //rgutierrez 16.01.2012
            //objEncargadoComercial.Persona.CodPersona = codEncComercial;
            lstInterlocutores.Add(objEncargadoComercial);

            //rgutierrez 16.01.2012
            //InterlocutorBE objVendedorWeb = new InterlocutorBE();
            //objVendedorWeb.Funcion = ParametroBC.Instance.getParamValue("IlocVendedor2");
            //objVendedorWeb.Persona.CodPersona = usuarioWeb.PerNr;

            //lstInterlocutores.Add(objVendedorWeb);

            return lstInterlocutores;
        }

        private decimal calculaRendimiento(decimal pCant, decimal pRend)
        {
            if (pRend != 0m)
            {
                decimal residuo = pCant % pRend, ajuste = 0m;
                if (residuo != 0) { ajuste = 1m; }
                decimal nuevaCant = (Math.Truncate(pCant / pRend) + ajuste) * pRend;
                return decimal.Round(nuevaCant, ParametroBC.Instance.getDecimales);
            }
            return decimal.Round(pCant, ParametroBC.Instance.getDecimales);
        }

        private void calculaFechaEntregaItem()
        {
            DateTime fechaCalculada, fechaActual = DateTime.Today;
            double factor = 0;
            //----
            if (cmbCondExp.Selection.Value == "01" || cmbCondExp.Selection.Value == "04")//normal +2
            {
                factor = 2;
            }
            else if (cmbCondExp.Selection.Value == "02")//express +1
            {
                factor = 1;
            }
            else
            {
                factor = 0;
            }
            //-----
            int count = Convert.ToInt32(factor);
            //Si es domingo pasa como si fuera lunes
            if (fechaActual.DayOfWeek == DayOfWeek.Sunday)
            {
                count += 1;
            }
            fechaCalculada = fechaActual;
            for (int i = 1; i <= count; i++)
            {
                fechaCalculada = fechaCalculada.AddDays(1);
                if (fechaCalculada.DayOfWeek == DayOfWeek.Sunday)
                {
                    fechaCalculada = fechaCalculada.AddDays(1);
                }
            }
            if (fechaCalculada > fechaActual)
            {
                txtFecha.Text = fechaCalculada.ToShortDateString();
            }
            else if (fechaActual.DayOfWeek == DayOfWeek.Sunday)
            {
                txtFecha.Text = fechaActual.AddDays(1).ToLongDateString();
            }
        }

        private string addItem(string pCodMat, decimal pCant)
        {
            string retMsg = "";
            try
            {
                this.objpedido = (PedidoBE)Session["Pedido"];
                List<DetalleBE> lstMateriales = (this.objpedido.Detalle == null) ? new List<DetalleBE>() : this.objpedido.Detalle;

                DetalleBE objDetalle = new DetalleBE();
                objDetalle.CodMaterial = pCodMat;
                objDetalle.Cantidad = pCant;

                MaterialBE objMaterial = MaterialBC.Instance.leerMaterial(objDetalle.CodMaterial, this.objpedido.OrgVentas, this.objpedido.CanalDist);

                if (objMaterial != null)
                {
                    objDetalle.DescMaterial = objMaterial.DescMaterial;
                    objDetalle.CodUMedida = objMaterial.CodUMedida;
                    objDetalle.Peso = objMaterial.Peso;
                    objDetalle.UMedidaRendimiendo = objMaterial.UMedidaRendimiendo;
                    objDetalle.ValorRendimiento = objMaterial.ValorRendimiento;
                    objDetalle.TipoMaterial = objMaterial.TipoMaterial;

                    objDetalle.Material = objMaterial;

                    //si UM = UNidad => redondear al entero mayor
                    if (ParametroBC.Instance.esTipoX(objDetalle.CodUMedida, "UMUnidad"))
                    {
                        objDetalle.Cantidad = (objDetalle.Cantidad > decimal.Truncate(objDetalle.Cantidad)) ? decimal.Truncate(objDetalle.Cantidad) + 1 : objDetalle.Cantidad;
                    }
                    //--- calcular rendimiento
                    if (!ParametroBC.Instance.esTipoX(objDetalle.Material.Tipo, "TipoMatServicio") &&
                        ParametroBC.Instance.esTipoX(objDetalle.Material.UMedidaRendimiendo, "UMRendimiento"))
                    {
                        objDetalle.Cantidad = this.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento);
                    }

                    bool auxC = false;
                    //--- cargar data de prioridad de entrega en base a la cond de exp.
                    if (!string.IsNullOrEmpty(this.objpedido.CondExp))
                    {
                        objDetalle.PrioridadEntrega = this.objpedido.CondExp;
                        auxC = true;
                    }
                    //--- cargar fecha de entrega en base a la del pedido
                    if (this.objpedido.FechaEntrega != objDetalle.Repartos[0].FechaEntrega)
                    {
                        objDetalle.Repartos[0].FechaEntrega = this.objpedido.FechaEntrega;
                        objDetalle.Repartos[0].CantPed = objDetalle.Cantidad;
                        objDetalle.Repartos[0].CantConf = objDetalle.Cantidad;
                        auxC = true;
                    }
                    if (auxC) { this.calculaFechaEntregaItem(objDetalle); }
                    //--- cálculo de posición
                    string tmpPos = "";
                    if (lstMateriales.Count > 0)
                    {
                        tmpPos = lstMateriales[lstMateriales.Count - 1].Posicion;
                    }
                    else
                    {
                        tmpPos = "00";
                    }
                    int posi = Convert.ToInt16(tmpPos) + 10;
                    objDetalle.Posicion = posi.ToString();

                    lstMateriales.Add(objDetalle);

                    //--- validar si es un material Z004/Z001 combo/kit
                    if (ParametroBC.Instance.esTipoX(objMaterial.Tipo, "TipoMatCombo"))
                    {
                        //buscar materiales asociados y añadirlos
                        string pTipoPos = "";
                        List<DetalleBE> lstDetalle = PedidoBC.Instance.buscaTipoPosicion(this.objpedido.CodTipoDoc, objMaterial.CodMaterial, this.objpedido.OrgVentas,
                                                                                         this.objpedido.CanalDist, out pTipoPos);
                        objDetalle.TipoPosicion = pTipoPos.Equals("") ? objDetalle.TipoPosicion : pTipoPos;

                        //--- si tiene elementos, entonces es un KIT o Combo
                        foreach (DetalleBE item in lstDetalle)
                        {
                            item.DescMaterial = item.Material.DescMaterial;
                            item.CodUMedida = item.Material.CodUMedida;
                            item.Peso = item.Material.Peso;
                            item.UMedidaRendimiendo = item.Material.UMedidaRendimiendo;
                            item.ValorRendimiento = item.Material.ValorRendimiento;
                            item.TipoMaterial = item.Material.TipoMaterial;

                            posi += 10;
                            item.Posicion = posi.ToString();
                            item.PosSup = objDetalle.Posicion;

                            item.Cantidad = item.CantComp * objDetalle.Cantidad;
                            //si UM = UNidad => redondear al entero mayor
                            if (ParametroBC.Instance.esTipoX(item.CodUMedida, "UMUnidad"))
                            {
                                item.Cantidad = (item.Cantidad > decimal.Truncate(item.Cantidad)) ? decimal.Truncate(item.Cantidad) + 1 : item.Cantidad;
                            }
                            //--------------------
                            if (item.Material == null)
                            {
                                item.Material = MaterialBC.Instance.leerMaterial(item.CodMaterial, this.objpedido.OrgVentas, this.objpedido.CanalDist);
                            }
                            //--- calcular rendimiento
                            if (!ParametroBC.Instance.esTipoX(item.Material.Tipo, "TipoMatServicio") &&
                                ParametroBC.Instance.esTipoX(item.Material.UMedidaRendimiendo, "UMRendimiento"))
                            {
                                item.Cantidad = this.calculaRendimiento(item.Cantidad, item.ValorRendimiento);
                            }

                            switch (objDetalle.TipoPosicion)
                            {
                                case "Z011":
                                    item.TipoPosicion = "Z012";
                                    break;
                                case "Z016":
                                    item.TipoPosicion = "Z017";
                                    break;
                                case "Z007":
                                    item.TipoPosicion = "Z008";
                                    break;
                                case "Z014":
                                    item.TipoPosicion = "Z015";
                                    break;
                            }

                            auxC = false;
                            //--- cargar data de prioridad de entrega en base a la cond de exp.
                            if (!string.IsNullOrEmpty(this.objpedido.CondExp))
                            {
                                item.PrioridadEntrega = this.objpedido.CondExp;
                                auxC = true;
                            }
                            //--- cargar fecha de entrega
                            if (this.objpedido.FechaEntrega != objDetalle.Repartos[0].FechaEntrega)
                            {
                                objDetalle.Repartos[0].FechaEntrega = this.objpedido.FechaEntrega;
                                objDetalle.Repartos[0].CantPed = item.Cantidad;
                                objDetalle.Repartos[0].CantConf = item.Cantidad;
                                auxC = true;
                            }
                            if (auxC) { this.calculaFechaEntregaItem(item); }
                            //--- solo agregar los q no hayan sido agregados antes
                            lstMateriales.Add(item);
                        }
                    }
                    this.objpedido.Detalle = lstMateriales;
                    Session["Pedido"] = this.objpedido;
                }
                else
                {
                    retMsg = "No se encontró el material.";
                }
            }
            catch (Exception ex)
            {
                retMsg = ex.Message;
            }
            return retMsg;
        }

        //rgutierrez 14.11.2011
        protected void btnBuscaMaterial_Click(object sender, EventArgs e)
        {
            try
            {
                ActiveForm = frmBusquedaMaterial;
            }
            catch (Exception ex)
            {
                
                throw;
            }
        }
        protected void btnListarMateriales_Click(object sender, EventArgs e)
        {
            try
            {
                lblMsjBusquedaMaterial.Text = "";
                List<MaterialBE> dt = new List<MaterialBE>();

                //WEBDIST
                UsuarioWebBE objUsuario = (UsuarioWebBE)Session["UsuarioWeb"];
                dt = MaterialBC.Instance.buscarMateriales("", txtNombreMaterial.Text.Trim(), "", "1000", "10", objUsuario.Usuario);

                if (dt.Count == 0)
                {
                    lblMsjBusquedaMaterial.Text = "No se encontraron materiales";
                }
                else
                {
                    listMaterialesEncontrados.DataSource = dt;
                    listMaterialesEncontrados.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsjBusquedaMaterial.Text = ex.Message.Replace("\r\n",".");
            }
        }
        protected void listMaterialesEncontrados_Command(object sender, ObjectListCommandEventArgs e)
        {
            try
            {
                if (e.CommandName == "Seleccionar")
                {
                    txtCodMaterial.Text = e.ListItem["CodMaterialCorto"];
                    ActiveForm = frmMateriales;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        protected void btnEditarPosicion_Click(object sender, EventArgs e)
        {
            try
            {
                lblResultado.Text = "";
                if (sListMateriales.Selection == null)
                {
                    lblResultado.Text = "Debe seleccionar una posición";
                    return;
                }
                //sListMateriales.Selection
                int cantSel = 0;
                foreach (MobileListItem item in sListMateriales.Items)
                {
                    if (item.Selected)
	                {
                        cantSel = cantSel + 1;
	                }
                }
                if (cantSel > 1)
                {
                    lblResultado.Text = "Sólo se puede editar una posición a la vez";
                    return;
                }

                objpedido = (PedidoBE)Session["Pedido"];
                string tipoPosicion = objpedido.Detalle[sListMateriales.Selection.Index].TipoPosicion;
                if (ParametroBC.Instance.esTipoPosCombo(tipoPosicion))
                {
                    txtcantidadmat.Visible = false;
                    lblcantidadmat.Visible = true;
                }
                else
                {
                    txtcantidadmat.Visible = true;
                    lblcantidadmat.Visible = false;
                }

                List<GenericBE> listacentros = CentroBC.Instance.listar(objpedido.Detalle[sListMateriales.Selection.Index].Material, objpedido.OrgVentas);
                cmbCentro.DataSource = listacentros;
                cmbCentro.DataTextField = "Descripcion";
                cmbCentro.DataValueField = "Codigo";
                cmbCentro.DataBind();

                string x = objpedido.Detalle[sListMateriales.Selection.Index].CodCentro;
                int i = 0;
                for (i = 0; i < cmbCentro.Items.Count; i++)
                {
                    if (cmbCentro.Items[i].Value == x)
                    {
                        cmbCentro.SelectedIndex = i;
                    }
                }

                txtcantidadmat.Text = objpedido.Detalle[sListMateriales.Selection.Index].Cantidad.ToString();
                lblcantidadmat.Text = objpedido.Detalle[sListMateriales.Selection.Index].Cantidad.ToString();

                //rgutierrez 15.12.2011
                //Obtenemos el máximo valor permitido de los descuentos ZD00 y ZD09
                //PedidoBE objPedido = new PedidoBE();
                //objPedido.CodTipoDoc = cmbTipoDoc.Selection.Value;
                //objPedido.CodCliente = txtCodCli.Text;
                //objPedido.Sector = "00";
                //objPedido.OrgVentas = cmbOrgVtas.SelectedValue;
                //objPedido.CanalDist = "10";
                //objPedido.Fecha = DateTime.Now;
                //objPedido.CondPago = cmbCondicionesPago.Selection.Value;
                //objPedido.GrupoCond = "";
                DetalleBE objDetalle = new DetalleBE();
                objDetalle.CodMaterial = objpedido.Detalle[sListMateriales.Selection.Index].CodMaterial;
                objDetalle.CodLote = objpedido.Detalle[sListMateriales.Selection.Index].CodLote;
                string retVal; string textoDescuento;
                lblDctoDecorPorc.Visible = false;
                txtDctoDecorPorc.Visible = false; txtDctoDecorPorc.Text = "0";
                lblDctoGenerico.Visible = false;
                txtDctoGenerico.Visible = false; txtDctoGenerico.Text = "0";
                lblDctoZD11.Visible = false;
                txtDctoZD11.Visible = false; txtDctoZD11.Text = "0";
                List<CondicionBE> lstDctos = CondicionBC.Instance.ObtenerCondiciones(objpedido, objDetalle, out retVal);
                for (i = 0; i < lstDctos.Count; i++)
                {
                    textoDescuento = lstDctos[i].ClaseCondicion + " - " + lstDctos[i].Denominacion + " - Máximo: " + lstDctos[i].LimiteInferior;
                    if (lstDctos[i].ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctoDecorPorc")) //ZD00
                    {
                        lblDctoDecorPorc.Text = textoDescuento;
                        lblDctoDecorPorc.Visible = true;
                        txtDctoDecorPorc.Visible = true;
                        txtDctoDecorPorc.Text = objpedido.Detalle[sListMateriales.Selection.Index].DctoDecorPorc.Importe.ToString(); //rgutierrez 17.11.2011
                        txtDctoDecorPorc.Title = lstDctos[i].LimiteInferior.ToString();
                    }
                    else if (lstDctos[i].ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctos")) //ZD09
                    {
                        lblDctoGenerico.Text = textoDescuento;
                        lblDctoGenerico.Visible = true;
                        txtDctoGenerico.Visible = true;
                        txtDctoGenerico.Text = objpedido.Detalle[sListMateriales.Selection.Index].DctoGenerico.Importe.ToString();
                        txtDctoGenerico.Title = lstDctos[i].LimiteInferior.ToString();
                    }
                    else if (lstDctos[i].ClaseCondicion == ParametroBC.Instance.getParamValue("CondZD11"))
                    {
                        lblDctoZD11.Text = textoDescuento;
                        lblDctoZD11.Visible = true;
                        txtDctoZD11.Visible = true;
                        txtDctoZD11.Text = objpedido.Detalle[sListMateriales.Selection.Index].DctoZD11.Importe.ToString();
                        txtDctoZD11.Title = lstDctos[i].LimiteInferior.ToString();
                    }
                }

                Session["indice"] = sListMateriales.Selection.Index;
                lblMsjEdicionMat.Text = ""; //rgutierrez 15.11.2011
                ActiveForm = frmEdicionMat;
            }
            catch (Exception ex)
            {
                lblResultado.Text = ex.Message;
            }
        }
        protected void btnBorrarPosiciones_Click(object sender, EventArgs e)
        {
            try
            {
                lblResultado.Text = "";
                if (sListMateriales.Selection == null)
                {
                    lblResultado.Text = "Debe seleccionar al menos una posición";
                    return;
                }

                string tipoPosicion = "";
                objpedido = (PedidoBE)Session["Pedido"];
                List<DetalleBE> lstMateriales;
                lstMateriales = (objpedido.Detalle == null) ? new List<DetalleBE>() : (List<DetalleBE>)objpedido.Detalle;
                DetalleBE objDet;

                foreach (MobileListItem item in sListMateriales.Items)
                {
                    if (item.Selected)
                    {
                        objDet = lstMateriales.Find(X => X.Posicion == item.Value);
                        if (objDet != null)
                        {
                            tipoPosicion = objDet.TipoPosicion;
                            if (!ParametroBC.Instance.esTipoPosCombo(tipoPosicion))
                            {
                                lstMateriales.RemoveAll(X => X.PosSup == objDet.Posicion);
                                //lstMateriales.RemoveAt(item.Index);
                                lstMateriales.Remove(objDet);
                            }
                            //else
                            //{
                            //    lblResultado.Text = "Ha seleccionado un tipo de Posicion que no se puede eliminar";
                            //    return;
                            //}
                        }
                    }
                }

                objpedido.Detalle = lstMateriales;
                if (objpedido.Detalle.Count == 0)
                {
                    DesactivarControles();
                }
                Session["Pedido"] = objpedido;
                CargarMateriales(objpedido.Detalle);
                CargarTotales(objpedido);
            }
            catch (Exception ex)
            {
                lblResultado.Text = ex.Message.Replace("\r\n",".");
            }
        }
        private void CargarMateriales(List<DetalleBE> detalle)
        {
            sListMateriales.DataSource = detalle;
            sListMateriales.DataTextField = "DescMovil";
            sListMateriales.DataValueField = "Posicion";
            sListMateriales.DataBind();
        }
    }
}